// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cc/raster/scoped_gpu_raster.h"
#include "cc/test/test_context_provider.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cc {
namespace {

    class ScopedGpuRasterTest : public testing::Test {
    public:
        ScopedGpuRasterTest() { }
    };

    // Releasing ScopedGpuRaster should restore GL_UNPACK_ALIGNMENT == 4.
    TEST(ScopedGpuRasterTest, RestoresUnpackAlignment)
    {
        scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
        EXPECT_TRUE(provider->BindToCurrentThread());
        gpu::gles2::GLES2Interface* gl = provider->ContextGL();
        GLint unpack_alignment = 0;
        gl->GetIntegerv(GL_UNPACK_ALIGNMENT, &unpack_alignment);
        EXPECT_EQ(4, unpack_alignment);

        {
            std::unique_ptr<ScopedGpuRaster> scoped_gpu_raster(
                new ScopedGpuRaster(provider.get()));
            gl->PixelStorei(GL_UNPACK_ALIGNMENT, 1);
            gl->GetIntegerv(GL_UNPACK_ALIGNMENT, &unpack_alignment);
            EXPECT_EQ(1, unpack_alignment);
        }

        gl->GetIntegerv(GL_UNPACK_ALIGNMENT, &unpack_alignment);
        EXPECT_EQ(4, unpack_alignment);
    }

} // namespace
} // namespace cc
